home *** CD-ROM | disk | FTP | other *** search
- 8000 REM screen plot program
- 8010 ' for up to 5 sets of x and y variables
- 8020 ' Cybersoft Group - Deane Wang - April 1982
- 8030 '
- 8035 KEY OFF
- 8040 CLS: CLEAR: SCREEN 0,0,0: OPTION BASE 1
- 8050 DEFINT I: DIM OX(5,100), OY(5,100), IX(5,100), IY(5,100), T(20)
- 8060 '
- 8070 PRINT:PRINT "PLOTTING PROGRAM FOR IBM-PC AND EPSON PRINTER WITH GRAFTRAX OPTION"
- 8080 PRINT:PRINT "REQUIRES PRTSC.EXE ON THE SAME DISK"
- 8090 PRINT:PRINT: COLOR 0,7
- 8100 PRINT:PRINT,"BY CYBERSOFT GROUP - VERSION 11/82 "
- 8105 LOCATE 24,32: PRINT"by Deane Wang";:COLOR 7,0
- 8110 FOR ZZ=1 TO 2: SOUND 200,20: NEXT ZZ: CLS
- 8120 PRINT"THIS PROGRAM REQUIRES INPUTS OF:":PRINT
- 8130 PRINT" THE NUMBER OF COLUMNS OF DATA (MAX 10 FOR X/Y PAIRS, 6 WITH ONE X"
- 8140 PRINT" THE NUMBER OF ROWS OF DATA (MAX 100)"
- 8150 PRINT:PRINT:PRINT"ALL THE COLUMNS OF DATA NEED NOT BE PLOTTED":PRINT:PRINT
- 8160 GOSUB 8290 'read in data
- 8170 GOSUB 8700 'min/max subroutine
- 8180 GOSUB 8930 'scaling subroutine
- 8190 GOSUB 9130 'bubble sort on x
- 8200 GOSUB 9320 'label screen
- 8210 GOSUB 9730 'plot data
- 8220 D$=INKEY$: IF D$="" THEN GOTO 8220 ELSE CLS
- 8230 'INPUT "do you want to plot another set in the same dataset";Q$
- 8240 'IF Q$="Y" OR Q$="y" THEN FLAG=1
- 8242 'IF YCOL$="Y" OF YCOL$="y" THEN GOSUB 8530 ELSE GOSUB 8420: GOSUB 8810:GOTO 8180
- 8250 INPUT "do you want to plot another graph";Q$
- 8260 IF Q$="Y" OR Q$="y" THEN CLOSE: GOTO 8040
- 8270 CLOSE: SYSTEM
- 8280 '
- 8290 REM input subroutine
- 8300 '
- 8310 INPUT "enter filename of data to be plotted";NA$
- 8320 OPEN NA$ FOR INPUT AS #1
- 8330 INPUT "enter number of data points, (100 max)";IM$
- 8340 IF IM$="" THEN GOTO 8330
- 8350 IMX=VAL(IM$): IF IMX>100 THEN IMX=100
- 8360 IF IMX<3 THEN PRINT "Dataset is too small": GOTO 8310
- 8370 INPUT "enter number of columns in the dataset";ICOL
- 8380 INPUT "do the data use one set of x values (Y or N)";QCOL$
- 8390 IF QCOL$="y" OR QCOL$="Y" THEN GOTO 8530 ELSE GOTO 8400
- 8400 INPUT "enter the number of x/y sets in the data";YNUM
- 8410 FOR I=1 TO YNUM
- 8420 INPUT "enter the column number for x(i) - (y assumed to be next column)";XCOL(I)
- 8430 NEXT I:IF FLAG THEN RETURN
- 8440 FOR I=1 TO IMX
- 8450 FOR IT=1 TO ICOL: IF EOF(1) THEN GOTO 8670 ELSE INPUT#1,T(IT): NEXT IT
- 8460 FOR IN=1 TO YNUM
- 8470 OX(IN,I)=T(XCOL(IN))
- 8480 OY(IN,I)=T(XCOL(IN)+1): PRINT OX(IN,I);OY(IN,I);"<>";
- 8490 NEXT IN:PRINT
- 8500 NEXT I
- 8510 IND=IMX: GOTO 8680
- 8520 '
- 8530 INPUT "enter the column number for x";XCOL
- 8540 INPUT "enter the number of y variables";YNUM
- 8550 FOR I=1 TO YNUM: PRINT "enter the column number for y -";I;
- 8560 INPUT YCOL(I): NEXT I:IF FLAG THEN RETURN
- 8570 FOR I=1 TO IMX
- 8580 FOR IT=1 TO ICOL: IF EOF(1) THEN GOTO 8670 ELSE INPUT#1,T(IT): NEXT IT
- 8590 FOR K=1 TO ICOL: PRINT T(K);"<>";: NEXT K: PRINT
- 8600 FOR IXN=1 TO YNUM: OX(IXN,I)=T(XCOL): NEXT IXN
- 8610 FOR IJ=1 TO YNUM
- 8620 OY(IJ,I)=T(YCOL(IJ))
- 8630 NEXT IJ
- 8640 NEXT I
- 8650 IND=IMX: GOTO 8680
- 8660 '
- 8670 IND=I-1 ' number of points per variable
- 8680 IN=YNUM: RETURN
- 8690 '
- 8700 REM min/max subroutine
- 8710 '
- 8720 XMN=999999!: XMX=-999999!: YMN=999999!: YMX=-999999!
- 8730 FOR IJ=1 TO IN
- 8740 FOR I=1 TO IND
- 8750 IF XMN>OX(IJ,I) THEN XMN=OX(IJ,I)
- 8760 IF YMN>OY(IJ,I) THEN YMN=OY(IJ,I)
- 8770 IF XMX<OX(IJ,I) THEN XMX=OX(IJ,I)
- 8780 IF YMX<OY(IJ,I) THEN YMX=OY(IJ,I)
- 8790 NEXT I
- 8800 NEXT IJ
- 8810 PRINT: PRINT "x minimum is";XMN
- 8820 PRINT "x maximum is";XMX
- 8830 PRINT "y minimum is";YMN
- 8840 PRINT "y maximum is";YMX
- 8850 Q$="n": INPUT "type y to set new values, press <enter> to use defaults";Q$
- 8860 IF Q$="y" OR Q$="Y" THEN GOTO 8870 ELSE GOTO 8910
- 8870 PRINT: INPUT "x minumum";XMN
- 8880 INPUT "x maximum";XMX
- 8890 INPUT "y minimum";YMN
- 8900 INPUT "y maximum";YMX
- 8910 RETURN
- 8920 '
- 8930 REM Scaling subroutine
- 8940 '
- 8950 XRAN=XMX-XMN
- 8960 XSC=XRAN/560
- 8970 YRAN=YMX-YMN
- 8980 YSC=YRAN/160
- 8990 FOR IJ=1 TO IN
- 9000 FOR I=1 TO IND
- 9010 IX(IJ,I)=(OX(IJ,I)-XMN)/XSC
- 9020 IF IX(IJ,I)>560 THEN IX(IJ,I)=560
- 9030 IF IX(IJ,I)<0 THEN IX(IJ,I)=0
- 9040 IX(IJ,I)=IX(IJ,I)+68 'offset for drawn y-axis
- 9050 IY(IJ,I)=(OY(IJ,I)-YMN)/YSC
- 9060 IF IY(IJ,I)>160 THEN IY(IJ,I)=160
- 9070 IF IY(IJ,I)<0 THEN IY(IJ,I)=0
- 9080 IY(IJ,I)=164-IY(IJ,I) 'reversal and offset from x-axis
- 9090 NEXT I
- 9100 NEXT IJ
- 9110 RETURN
- 9120 '
- 9130 REM Sorting subroutine
- 9140 ' a bubble sort in the x-dimension
- 9150 '
- 9160 PRINT: INPUT "Do the data need sorting (Y or N)"; Q$
- 9170 IF Q$="Y" OR Q$="y" THEN GOTO 9180 ELSE GOTO 9300
- 9180 FOR IJ=1 TO IN
- 9190 IPAS=1
- 9200 WHILE IPAS
- 9210 IPAS=0
- 9220 FOR I=1 TO (IND-1)
- 9230 IF IX(IJ,I)>IX(IJ,I+1) THEN GOTO 9240 ELSE GOTO 9270
- 9240 SWAP IX(IJ,I),IX(IJ,I+1)
- 9250 SWAP IY(IJ,I),IY(IJ,I+1)
- 9260 IPAS=1
- 9270 NEXT I
- 9280 WEND
- 9290 NEXT IJ
- 9300 RETURN
- 9310 '
- 9320 REM Labeling and axis subroutine
- 9330 '
- 9340 PRINT: INPUT "enter y-axis label (12 characters)";YNA$
- 9350 INPUT "enter x-axis label (20 characters)";XNA$
- 9360 SCREEN 2: CLS
- 9370 LOCATE 24,30
- 9380 IF LEN(XNA$)>20 THEN PRINT LEFT$(XNA$,20); ELSE PRINT XNA$;
- 9390 FOR I=1 TO 12
- 9400 LOCATE (4+I),1: PRINT MID$(YNA$,I,1);
- 9410 NEXT I
- 9420 '
- 9430 PSET(68,164)
- 9440 FOR I=1 TO 5: DRAW "r112d4u4": NEXT I
- 9450 PSET(68,164)
- 9460 FOR I=1 TO 5: DRAW "u32l6r6": NEXT I
- 9470 '
- 9480 YINT=YRAN/5
- 9490 YLB(1)=YMN: YLB(6)=YMX
- 9500 FOR I=2 TO 5
- 9510 YLB(I)=(I-1)*YINT+YMN
- 9520 NEXT I
- 9530 XINT=XRAN/5
- 9540 XLB(1)=XMN: XLB(6)=XMX
- 9550 FOR I=2 TO 5
- 9560 XLB(I)=(I-1)*XINT+XMN
- 9570 NEXT I
- 9580 '
- 9590 FOR I=1 TO 6
- 9600 IP=21-(4*(I-1))
- 9610 LOCATE IP,3
- 9620 PRINT USING "###.#";YLB(I);
- 9630 NEXT I
- 9640 FOR I=1 TO 5
- 9650 IP=6+((I-1)*14)
- 9660 LOCATE 22,IP
- 9670 PRINT USING "#####";XLB(I);
- 9680 PRINT " ";
- 9690 NEXT I
- 9700 PRINT USING "#####";XLB(6);
- 9710 RETURN
- 9720 '
- 9730 REM PLOTTING SUBROUTINE
- 9740 '
- 9750 SYM$(1)="d2l3r6u1l6u1r6u1l6u1r6"
- 9760 SYM$(4)="u1r1l1d1l1r3d1r1l5"
- 9770 SYM$(3)="d1r2u1r1l4u1r4l1u1l2"
- 9780 SYM$(5)="bl2u2r6d4l6u2br2"
- 9790 SYM$(2)="e3g3h3f6h3g3e3"
- 9800 FOR IJ=1 TO IN
- 9810 PSET(IX(IJ,1),IY(IJ,1)): DRAW SYM$(IJ)
- 9820 FOR I=1 TO IND-1
- 9830 FOR IA=1 TO IND
- 9840 IF I+IA>IND THEN GOTO 9910
- 9850 IF IY(IJ,I+IA)>163 THEN GOTO 9860 ELSE GOTO 9870
- 9860 NEXT IA
- 9870 LINE(IX(IJ,I),IY(IJ,I))-(IX(IJ,I+IA),IY(IJ,I+IA))
- 9880 I=I+IA-1
- 9890 DRAW SYM$(IJ)
- 9900 NEXT I
- 9910 NEXT IJ
- 9920 RETURN
- J,I),IY(IJ,I))-(IX(IJ,I+IA),IY(IJ,I+IA))